【抓图功能】利用java内置摄像机功能进行rtsp流截帧取流图片

您所在的位置:网站首页 nodejs视频流 省流 【抓图功能】利用java内置摄像机功能进行rtsp流截帧取流图片

【抓图功能】利用java内置摄像机功能进行rtsp流截帧取流图片

2023-06-04 22:04| 来源: 网络整理| 查看: 265

前言

目前有一个需求,需要从第三方平台的rtsp视频流里抓取图片,进行其他的AI识别操作。一般像主流视频平台大华、海康都会有抓图API接口提供,但有个别厂商不提供(可能是为了省资源…)所以只能自己搭建一个抓图API服务了,其实难也不难主要是要有思路。

FFmpegFrameGrabber

找到了这个构造函数 位于 org.bytedeco.javacv下 构造函数的作用是构造一个视频帧抓取器对象,并打开一个视频文件或流,以便读取其中的视频帧数据

这个可以实现我们需要的功能

引入pom依赖包 org.bytedeco javacv 1.4.1 实现代码 package com.example.demo.util; import org.bytedeco.javacv.*; import org.bytedeco.javacpp.opencv_core; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; /** * Rtsp抓图API * * @author lxl * @date 2023/5/29 */ public class CameraSnatchApi { public static void rtspToImg(String file) throws IOException{ // file 即rtsp流 FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(file); grabber.setOption("rtsp_transport", "tcp"); grabber.setImageWidth(1280); grabber.setImageHeight(720); grabber.start(); //1.创建摄像机对象 -> 播放视频 CanvasFrame canvasFrame = new CanvasFrame("初始化摄像机"); canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); canvasFrame.setAlwaysOnTop(true); OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat(); //2.截帧取流图 File optPut = new File("D:\\work\\test\\ops\\"+ System.currentTimeMillis() + ".jpeg"); while (true) { Frame frame = grabber.grabImage(); if (frame != null) { // 3.输出图片流 ImageIO.write(FrameToBufferedImage(frame), "jpeg", optPut); } } } /** * BufferedImage对象 */ public static BufferedImage FrameToBufferedImage(Frame frame) { Java2DFrameConverter converter = new Java2DFrameConverter(); BufferedImage bufferedImage = converter.getBufferedImage(frame); return bufferedImage; } }


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3